# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import datetime

from django.db import models
from django.utils.encoding import python_2_unicode_compatible

# Create your models here.

# 作者、文章、用户、文章分类、评论、收藏、点赞

# 文章和用户：多对多关系  ManyToManyField()
# 作者和文章：一个作者对应多个文章，一个文章对应一个作者；作者和文章是一个一对多的关系  ForginKey()并且设置在文章这个model中；
# 文章分类和文章：一个分类对应多个文章，一个文章对应一个分类，一对多关系；ForginKey()并且设置在文章这个model中；
# 文章、用户、评论/收藏/点赞

# 1.用户模型
# @python_2_unicode_compatible是为__str__设计的一个装饰器函数，可以兼容python2(__unicode__)和python3的__str__语法。
@python_2_unicode_compatible
class NewUser(models.Model):
    uname = models.CharField(max_length=50, verbose_name=u'姓名')
    upwd = models.CharField(max_length=200, verbose_name=u'密码')
    uemail = models.EmailField(verbose_name=u'邮箱')

    class Meta:
        verbose_name = u'用户'
        verbose_name_plural = u'用户'

    # Python3中使用__str__
    def __str__(self):
        return self.uname


# 2.文章分类模型
@python_2_unicode_compatible
class ArticleType(models.Model):
    atname = models.CharField(max_length=50, verbose_name=u'文章分类')
    atinfo = models.TextField(default='', verbose_name=u'分类简介')

    class Meta:
        verbose_name = u'文章分类'
        verbose_name_plural = u'文章分类'

    def __str__(self):
        return self.atname

# 3.作者模型
@python_2_unicode_compatible
class Author(models.Model):
    authorname = models.CharField(max_length=50, verbose_name=u'作者姓名')
    authorinfo = models.TextField(default='', verbose_name=u'作者简介')

    class Meta:
        verbose_name = u'作者'
        verbose_name_plural = u'作者'

    def __str__(self):
        return self.authorname

# 4.文章模型
@python_2_unicode_compatible
class Article(models.Model):
    atitle = models.CharField(max_length=200, verbose_name=u'文章标题')
    acontent = models.TextField(default='', verbose_name=u'文章内容')
    apub_time = models.DateTimeField(auto_now_add=True, editable=True, verbose_name=u'文章发布日期')
    aupdate_time = models.DateTimeField(auto_now=True, editable=True, verbose_name=u'文章更新日期')
    acomment_num = models.IntegerField(default=0, verbose_name=u'评论数')
    akeep_num = models.IntegerField(default=0, verbose_name=u'收藏数')
    apoll_num = models.IntegerField(default=0, verbose_name=u'点赞数')

    # 关联分类
    article_type = models.ForeignKey(ArticleType, verbose_name=u'文章分类')
    # 关联作者
    author = models.ForeignKey(Author, verbose_name=u'作者')
    # 关联用户(是基于点赞收藏评论产生的联系)
    user = models.ManyToManyField(NewUser, default=0, null=True, blank=True, verbose_name=u'用户')

    class Meta:
        verbose_name = u'文章'
        verbose_name_plural = u'文章'

    def __str__(self):
        return self.atitle

# 5.评论模型
@python_2_unicode_compatible
class Comment(models.Model):
    # 关联用户 关联文章 需要记录哪一个用户评论的哪一个文章，以及评论的内容；
    user = models.ForeignKey(NewUser, verbose_name=u'用户')
    article = models.ForeignKey(Article, verbose_name=u'文章')
    content = models.TextField(default='', verbose_name=u'评论内容')
    date = models.DateTimeField(auto_now_add=True, editable=True, verbose_name=u'评论时间')

    class Meta:
        verbose_name = u'评论'
        verbose_name_plural = u'评论'

    def __str__(self):
        return self.content

# 6.点赞收藏模型
class Poll(models.Model):
    user = models.ForeignKey(NewUser)
    article = models.ForeignKey(Article)
class Keep(models.Model):
    user = models.ForeignKey(NewUser)
    article = models.ForeignKey(Article)

